package com.example.himalaya.views;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;

import com.example.himalaya.R;

/**
 * 正在加载视图
 */
public class LoadingView extends AppCompatImageView {

    //旋转角度
    private int rotateDegree = 0;

    private boolean mIsNeedRotate = false;

    public LoadingView(@NonNull Context context) {
        //保证唯一入口
        this(context,null);
    }

    public LoadingView(@NonNull Context context, @Nullable AttributeSet attrs) {
        //保证唯一入口
        this(context, attrs,0);
    }

    public LoadingView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //设置图片资源
        setImageResource(R.drawable.icon_loading);
    }

    /**
     * 绑定到窗口时
     */
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        mIsNeedRotate = true;
        post(new Runnable() {
            @Override
            public void run() {
                rotateDegree += 30;
                rotateDegree= rotateDegree<= 360 ? rotateDegree : 0;
                invalidate();
                //是否继续旋转
                if (mIsNeedRotate) {
                    postDelayed(this, 100);
                }
            }
        });
    }

    /**
     * 从窗口解绑时
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mIsNeedRotate = false;
    }

    /**
     * 图片绘制时
     * @param canvas 画布
     */
    @Override
    protected void onDraw(Canvas canvas) {
        /**
         * 第一个参数是旋转角度
         * 第二个参数是旋转的X坐标
         * 第三个参数是旋转的Y坐标
         */
        canvas.rotate(rotateDegree,getWidth()/2,getHeight()/2);
        super.onDraw(canvas);
    }
}
